utils: replace DMABUF heap with memfd Memfd does not require access to a device and is simpler to use overall. Also allows us to remove a dependency. 
diff --git a/Cargo.lock b/Cargo.lock index dbae6e7..9936996 100644 --- a/Cargo.lock +++ b/Cargo.lock 
@@ -263,24 +263,11 @@  source = "registry+https://github.com/rust-lang/crates.io-index"  checksum = "672465ae37dc1bc6380a6547a8883d5dd397b0f1faaad4f265726cc7042a5345"  dependencies = [ - "nix 0.28.0", + "nix",  "windows-sys",  ]    [[package]] -name = "dma-heap" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317d6cf25b1d189b359d1ac497b2ba8c607354f1f04a9fc52b6e0c570ef13048" -dependencies = [ - "log", - "nix 0.27.1", - "strum", - "strum_macros", - "thiserror", -] - -[[package]]  name = "either"  version = "1.11.0"  source = "registry+https://github.com/rust-lang/crates.io-index" @@ -476,17 +463,6 @@    [[package]]  name = "nix" -version = "0.27.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" -dependencies = [ - "bitflags 2.5.0", - "cfg-if", - "libc", -] - -[[package]] -name = "nix"  version = "0.28.0"  source = "registry+https://github.com/rust-lang/crates.io-index"  checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4" @@ -604,12 +580,6 @@  ]    [[package]] -name = "rustversion" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "092474d1a01ea8278f69e6a358998405fae5b8b963ddaeb2b0b04a128bf1dfb0" - -[[package]]  name = "ryu"  version = "1.0.18"  source = "registry+https://github.com/rust-lang/crates.io-index" @@ -665,25 +635,6 @@  checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"    [[package]] -name = "strum" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" - -[[package]] -name = "strum_macros" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "rustversion", - "syn 2.0.61", -] - -[[package]]  name = "syn"  version = "1.0.109"  source = "registry+https://github.com/rust-lang/crates.io-index" @@ -778,8 +729,8 @@  version = "0.0.1"  dependencies = [  "anyhow", - "dma-heap",  "log", + "nix",  "thiserror",  "v4l2r",  ] @@ -795,7 +746,7 @@  "enumn",  "env_logger",  "log", - "nix 0.28.0", + "nix",  "thiserror",  "utils",  ] @@ -809,7 +760,7 @@  "cbindgen",  "env_logger",  "log", - "nix 0.28.0", + "nix",  "v4l2r",  ]   
diff --git a/utils/Cargo.toml b/utils/Cargo.toml index 894c0a3..6ed0379 100644 --- a/utils/Cargo.toml +++ b/utils/Cargo.toml 
@@ -11,4 +11,4 @@  thiserror = "1.0"  anyhow = "1.0"  log = "0.4.14" -dma-heap = "0.2.1" +nix = { version = "0.28", features = ["fs"] } 
diff --git a/utils/src/dmabuf_exporter.rs b/utils/src/dmabuf_exporter.rs index bd77f9b..ce19e9b 100644 --- a/utils/src/dmabuf_exporter.rs +++ b/utils/src/dmabuf_exporter.rs 
@@ -1,21 +1,24 @@  use std::fs::File;   -use dma_heap::{Heap, HeapKind}; +use nix::{ + sys::memfd::{memfd_create, MemFdCreateFlag}, + unistd::ftruncate, +};  use v4l2r::{memory::DmaBufHandle, Format};    use anyhow::Result;    pub fn export_dmabufs(format: &Format, nb_buffers: usize) -> Result<Vec<Vec<DmaBufHandle<File>>>> { - let heap = Heap::new(HeapKind::System)?; -  let fds: Vec<Vec<DmaBufHandle<File>>> = (0..nb_buffers)  .map(|_| {  format  .plane_fmt  .iter()  .map(|plane| { - let fd = File::from(heap.allocate(plane.sizeimage as usize).unwrap()); - DmaBufHandle::from(fd) + memfd_create(c"memfd buffer", MemFdCreateFlag::MFD_ALLOW_SEALING) + .and_then(|fd| ftruncate(&fd, i64::from(plane.sizeimage)).map(|_| fd)) + .map(|fd| DmaBufHandle::from(File::from(fd))) + .unwrap()  })  .collect()  })